#include "box.h"
#include "ui_box.h"

void box::keyPressEvent(QKeyEvent *event){
    QKeyEvent *key=(QKeyEvent*)event;
    switch (key->key()) {
    case Qt::Key_Up:{nDirection=1;   //1代表上
        break;}
    case Qt::Key_Down:{nDirection=2;   //2代表下
        break;}
    case Qt::Key_Left:{nDirection=3;   //3代表左
        break;}
    case Qt::Key_Right:{nDirection=4;   //4代表右
        break;}
    default:;
    }
    da_update();
}

void box::da_update(){
    sDisplay=" ";
    switch(nDirection)
    {
    case 1:
        manrect.setTop(manrect.top()-40);
        manrect.setBottom(manrect.bottom()-40);
        break;
    case 2:
        manrect.setTop(manrect.top()+40);
        manrect.setBottom(manrect.bottom()+40);
        break;
    case 3:
        manrect.setLeft(manrect.left()-40);
        manrect.setRight(manrect.right()-40);
        break;
    case 4:
        manrect.setLeft(manrect.left()+40);
        manrect.setRight(manrect.right()+40);
    default:;
    }

    box_update();
    isboxhitwall();
    ismanhitwall();
    isin();
    update();//paintEvent更新
}

void box::box_update(){
    for(int i=0;i<5;i++){
        if(manrect==boxrect[i]){
            switch(nDirection)
            {
            case 1:
                boxrect[i].setTop(boxrect[i].top()-40);
                boxrect[i].setBottom(boxrect[i].bottom()-40);
                break;
            case 2:
                boxrect[i].setTop(boxrect[i].top()+40);
                boxrect[i].setBottom(boxrect[i].bottom()+40);
                break;
            case 3:
                boxrect[i].setLeft(boxrect[i].left()-40);
                boxrect[i].setRight(boxrect[i].right()-40);
                break;
            case 4:
                boxrect[i].setLeft(boxrect[i].left()+40);
                boxrect[i].setRight(boxrect[i].right()+40);
            default:;
            }
        }
    }
}

void box::isboxhitwall(){
    for(int a=0;a<5;a++){
        for(int b=0;b<37;b++){
            if(boxrect[a]==wall[b]){
                switch(nDirection)
                {
                case 2:
                    manrect.setTop(manrect.top()-40);
                    manrect.setBottom(manrect.bottom()-40);
                    boxrect[a].setTop(boxrect[a].top()-40);
                    boxrect[a].setBottom(boxrect[a].bottom()-40);
                    break;
                case 1:
                    manrect.setTop(manrect.top()+40);
                    manrect.setBottom(manrect.bottom()+40);
                    boxrect[a].setTop(boxrect[a].top()+40);
                    boxrect[a].setBottom(boxrect[a].bottom()+40);
                    break;
                case 4:
                    manrect.setLeft(manrect.left()-40);
                    manrect.setRight(manrect.right()-40);
                    boxrect[a].setLeft(boxrect[a].left()-40);
                    boxrect[a].setRight(boxrect[a].right()-40);
                    break;
                case 3:
                    manrect.setLeft(manrect.left()+40);
                    manrect.setRight(manrect.right()+40);
                    boxrect[a].setLeft(boxrect[a].left()+40);
                    boxrect[a].setRight(boxrect[a].right()+40);
                default:;
                }
            }
        }
    }
    for(int a=0;a<5;a++){
        for(int c=0;c<5&&c!=a;c++){
            if(boxrect[a]==boxrect[c]){
                switch(nDirection)
                {
                case 2:
                    manrect.setTop(manrect.top()-40);
                    manrect.setBottom(manrect.bottom()-40);
                    boxrect[a].setTop(boxrect[a].top()-40);
                    boxrect[a].setBottom(boxrect[a].bottom()-40);
                    break;
                case 1:
                    manrect.setTop(manrect.top()+40);
                    manrect.setBottom(manrect.bottom()+40);
                    boxrect[a].setTop(boxrect[a].top()+40);
                    boxrect[a].setBottom(boxrect[a].bottom()+40);
                    break;
                case 4:
                    manrect.setLeft(manrect.left()-40);
                    manrect.setRight(manrect.right()-40);
                    boxrect[a].setLeft(boxrect[a].left()-40);
                    boxrect[a].setRight(boxrect[a].right()-40);
                    break;
                case 3:
                    manrect.setLeft(manrect.left()+40);
                    manrect.setRight(manrect.right()+40);
                    boxrect[a].setLeft(boxrect[a].left()+40);
                    boxrect[a].setRight(boxrect[a].right()+40);
                default:;
                }
            }
        }
    }
}

void box::ismanhitwall(){
    for(int i=0;i<37;i++){
        if(manrect==wall[i]){
            switch(nDirection)
            {
            case 2:
                manrect.setTop(manrect.top()-40);
                manrect.setBottom(manrect.bottom()-40);
                break;
            case 1:
                manrect.setTop(manrect.top()+40);
                manrect.setBottom(manrect.bottom()+40);
                break;
            case 4:
                manrect.setLeft(manrect.left()-40);
                manrect.setRight(manrect.right()-40);
                break;
            case 3:
                manrect.setLeft(manrect.left()+40);
                manrect.setRight(manrect.right()+40);
            default:;
            }
        }
    }
}

void box::isin(){
    for(int i=0;i<5;i++){
        inhole[i]=false;
    }
    for(int a=0;a<5;a++){
        for(int b=0;b<5;b++){
            if(holes[a].topLeft()==boxrect[b].topLeft()){
                inhole[a]=true;
            }
        }
    }
    for(int c=0;c<5;c++){
        if(inhole[c])holes[c].setSize(manrect.size()/200);
        else holes[c].setSize(manrect.size());
    }
    next=true;

    for(int e=0;e<5;e++){
        if(inhole[e]==false)next=false;}
    if(next)round=2;
}
